gusucode.com > VC++ RingSDK界面库 > VC++ RingSDK界面库/code/libsrc/ringlib/reg.cpp
/********************************************************************** // // // ########## ###### ######### # ###### # // ############# ########### ######### ######### ### // ######## # ### ## ############# ## ## ##### # #### // #### ## ## ### ### ### # # ##### ##### // # ### # # ## ## ## ## ### // ## ###### ## ## #### #### # # ## // ######### ### ## ### ####### ###### ## ## ### // ###### ## ###### ## ## #### # ## #### // ####### ## ###### ## ### ## ## ### ###### // ######### ## ###### ## ###### ### ## ### # ##### // ## ###### ####### ### #### ## ## ####### ######## ## #### // ## #### ### # ### ### ## ########## ###### ## #### // ## ## ## ######### #### # ## // # ### // ## // ### // ## // // // RingSDK类库 ringlib.lib //作者:临风 // //版本:0.1 // //声明:本类库可以自由使用而不须对作者作出任何回报,但作者希望能得到 // 你的鼓励和支持。你可以对类库源码作出修改和改进,但希望你能在 // 修改的同时给作者一份同样的副本。 // 本类库不得用于任何商业用途,如确实需要,请与作者联系。 // //e-mail:ringphone@sina.com // //原文件名:reg.cpp // //说明:注册表操作类实现代码 // **********************************************************************/ #define MAKE_SELF_LIB //#ifndef __BORLANDC__ //#include "ringlib.h" //#else #include "ringlib.h" //#endif ringReg::ringReg() { m_dwKeyCnt=0; m_dwKeyMax=0; m_lprv=NULL; m_hKey=NULL; } ringReg::~ringReg() { Destroy(); } void ringReg::Destroy() { m_dwKeyCnt=0; m_dwKeyMax=0; m_lprv = (LPREGVALINFO)Del(m_lprv); Close(); } BOOL ringReg::error(HKEY hKey,LPCTSTR szSubKey) { char err[20]; if(hKey == HKEY_LOCAL_MACHINE) wsprintf(err,"HKEY_LOCAL_MACHINE"); else if(hKey == HKEY_CLASSES_ROOT) wsprintf(err,"HKEY_CLASSES_ROOT"); else if(hKey == HKEY_CURRENT_USER) wsprintf(err,"HKEY_CURRENT_USER"); else if(hKey == HKEY_USERS) wsprintf(err,"HKEY_USERS"); else wsprintf(err,""); Errmsg("错误:不能创建注册表项:%s\\%s",err,szSubKey); return FALSE; } BOOL ringReg::Set(HKEY hKey,LPCTSTR szSubKey,LPCTSTR szKey,LPCTSTR szVal) { HKEY hKey1; LONG lRetCode; DWORD dwDisposition; Close(); if(hKey==HKEY_LOCAL_MACHINE || hKey==HKEY_CLASSES_ROOT || hKey==HKEY_CURRENT_USER || hKey==HKEY_USERS) { if(!szSubKey) return FALSE; lRetCode=RegCreateKeyEx(hKey,szSubKey,0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,NULL,&hKey1,&dwDisposition); if (lRetCode != ERROR_SUCCESS) return error(hKey,szSubKey); lRetCode=RegSetValueEx(hKey1,szKey,NULL,REG_SZ,(LPBYTE)szVal,strlen(szVal)); RegCloseKey(hKey1); } else lRetCode=RegSetValueEx(hKey,szKey,NULL,REG_SZ,(LPBYTE)szVal,strlen(szVal)); return (lRetCode == ERROR_SUCCESS); } BOOL ringReg::Set(HKEY hKey,LPCTSTR szSubKey,LPCTSTR szKey,DWORD dwVal) { HKEY hKey1; LONG lRetCode; DWORD dwDisposition; Close(); if(hKey==HKEY_LOCAL_MACHINE || hKey==HKEY_CLASSES_ROOT || hKey==HKEY_CURRENT_USER || hKey==HKEY_USERS) { if(!szSubKey) return FALSE; lRetCode=RegCreateKeyEx(hKey,szSubKey,0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,NULL,&hKey1,&dwDisposition); if (lRetCode != ERROR_SUCCESS) return error(hKey,szSubKey); lRetCode=RegSetValueEx(hKey1,szKey,NULL,REG_DWORD,(LPBYTE)&dwVal,sizeof(DWORD)); RegCloseKey(hKey1); } else lRetCode=RegSetValueEx(hKey,szKey,NULL,REG_DWORD,(LPBYTE)&dwVal,sizeof(DWORD)); return (lRetCode == ERROR_SUCCESS); } BOOL ringReg::Set(HKEY hKey,LPCTSTR szSubKey,LPCTSTR szKey,LPVOID lpData,DWORD dwType,DWORD cbData) { HKEY hKey1; LONG lRetCode; DWORD dwDisposition; Close(); if(hKey==HKEY_LOCAL_MACHINE || hKey==HKEY_CLASSES_ROOT || hKey==HKEY_CURRENT_USER || hKey==HKEY_USERS) { if(!szSubKey) return FALSE; lRetCode = RegCreateKeyEx(hKey,szSubKey,0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,NULL,&hKey1,&dwDisposition); if (lRetCode != ERROR_SUCCESS) return error(hKey,szSubKey); lRetCode = RegSetValueEx(hKey1,szKey,NULL,dwType,(LPBYTE)lpData,cbData); RegCloseKey(hKey1); } else lRetCode=RegSetValueEx(hKey,szKey,NULL,dwType,(LPBYTE)lpData,cbData); return (lRetCode == ERROR_SUCCESS); } BOOL ringReg::Check(DWORD dwNum) { if(!m_lprv) { m_lprv = (LPREGVALINFO)New(dwNum*sizeof(REGVALINFO)); if(!m_lprv) return FALSE; else { m_dwKeyMax = dwNum; m_dwKeyCnt = 0; } } else if(m_dwKeyCnt >= m_dwKeyMax) return FALSE; return TRUE; } BOOL ringReg::Add(LPCTSTR szKey,LPVOID lpData,DWORD dwType,DWORD cbData,DWORD dwNum) { if(!Check(dwNum)) return FALSE; m_lprv[m_dwKeyCnt].szValName = szKey; m_lprv[m_dwKeyCnt].dwType = dwType; m_lprv[m_dwKeyCnt].lpData = lpData; m_lprv[m_dwKeyCnt].cbData = cbData; m_dwKeyCnt++; return TRUE; } BOOL ringReg::Add(LPCTSTR szKey,DWORD dwData,DWORD dwNum) { if(!Check(dwNum)) return FALSE; m_lprv[m_dwKeyCnt].szValName = szKey; m_lprv[m_dwKeyCnt].dwType = REG_DWORD; m_lprv[m_dwKeyCnt].dwData = dwData; m_lprv[m_dwKeyCnt].lpData = (LPBYTE)&m_lprv[m_dwKeyCnt].dwData; m_lprv[m_dwKeyCnt].cbData = sizeof(DWORD); m_dwKeyCnt++; return TRUE; } BOOL ringReg::Add(LPCTSTR szKey,LPCTSTR szData,DWORD dwNum) { if(!Check(dwNum)) return FALSE; m_lprv[m_dwKeyCnt].szValName = szKey; m_lprv[m_dwKeyCnt].dwType = REG_SZ; m_lprv[m_dwKeyCnt].lpData = (LPBYTE)szData; m_lprv[m_dwKeyCnt].cbData = strlen(szData); m_dwKeyCnt++; return TRUE; } BOOL ringReg::Set(HKEY hKey,LPCTSTR szSubKey) { HKEY hKey1; LONG lRetCode; BOOL bUseKeyName; DWORD dwDisposition; DWORD i; Close(); if(hKey==HKEY_LOCAL_MACHINE || hKey==HKEY_CLASSES_ROOT || hKey==HKEY_CURRENT_USER || hKey==HKEY_USERS) { if(!szSubKey) return FALSE; bUseKeyName = TRUE; lRetCode=RegCreateKeyEx(hKey,szSubKey,0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,NULL,&hKey1,&dwDisposition); if (lRetCode != ERROR_SUCCESS) return error(hKey,szSubKey); } else { bUseKeyName = FALSE; if(hKey) hKey1 = hKey; else return FALSE; } for(i=0;i<m_dwKeyCnt;i++) { lRetCode = RegSetValueEx(hKey1,m_lprv[i].szValName,NULL,m_lprv[i].dwType,(LPBYTE)m_lprv[i].lpData,m_lprv[i].cbData); if (lRetCode != ERROR_SUCCESS) { Errmsg("错误:写注册表失败"); if(bUseKeyName) RegCloseKey(hKey1); Destroy(); return FALSE; } } if(bUseKeyName) RegCloseKey(hKey1); Destroy(); return TRUE; } BOOL ringReg::Get(HKEY hKey,LPCTSTR szSubKey,LPCTSTR szKey,LPVOID lpData,DWORD dwDataSize) { if(!szSubKey || szSubKey[0]=='\0') return FALSE; DWORD dwType; Close(); if(RegOpenKeyEx(hKey,szSubKey,0,KEY_ALL_ACCESS,&m_hKey) != ERROR_SUCCESS) { m_hKey = NULL; return FALSE; } return(RegQueryValueEx(m_hKey,szKey,NULL,&dwType,(LPBYTE)lpData,&dwDataSize) == ERROR_SUCCESS); } DWORD ringReg::GetInt(HKEY hKey,LPCTSTR szSubKey,LPCTSTR szKey,DWORD dwDef) { if(!szSubKey || szSubKey[0]=='\0') return FALSE; DWORD dwType,dwDataSize,dwVal; Close(); if(RegOpenKeyEx(hKey,szSubKey,0,KEY_ALL_ACCESS,&m_hKey) != ERROR_SUCCESS) { m_hKey = NULL; return dwDef; } dwDataSize = sizeof(DWORD); if(RegQueryValueEx(m_hKey,szKey,NULL,&dwType,(LPBYTE)&dwVal,&dwDataSize) == ERROR_SUCCESS) dwDef = dwVal; return dwDef; } BOOL ringReg::Get(LPCTSTR szKey,LPVOID lpData,DWORD dwDataSize) { if(!m_hKey) return FALSE; DWORD dwType; return (RegQueryValueEx(m_hKey,szKey,NULL,&dwType,(LPBYTE)lpData,&dwDataSize) == ERROR_SUCCESS); } DWORD ringReg::GetInt(LPCTSTR szKey,DWORD dwDef) { if(!m_hKey) return dwDef; DWORD dwType,dwDataSize,dwVal; dwDataSize = sizeof(DWORD); if(RegQueryValueEx(m_hKey,szKey,NULL,&dwType,(LPBYTE)&dwVal,&dwDataSize) == ERROR_SUCCESS) dwDef = dwVal; return dwDef; } BOOL ringReg::Delete(HKEY hKey,LPCTSTR szSubKey,LPCTSTR szKey) { LONG lResult; HKEY hKey1; Close(); lResult = RegOpenKeyEx(hKey,szSubKey,0,KEY_ALL_ACCESS,&hKey1); if(lResult != ERROR_SUCCESS) return FALSE; lResult = RegDeleteValue(hKey1,szKey); RegCloseKey(hKey1); return (lResult == ERROR_SUCCESS); } BOOL ringReg::Delete(HKEY hKey,LPCTSTR szSubKey) { Close(); if(OSType()==NT) return DelNT(hKey,szSubKey); else return (RegDeleteKey(hKey,szSubKey) == ERROR_SUCCESS); } BOOL ringReg::DelNT(HKEY hKey,LPCTSTR szSubKey) { LONG lResult; HKEY hKey1; DWORD dwIndex=0; char szKeyName[300]; char szKey[500]; DWORD dwKeySize=300; lResult = RegOpenKeyEx(hKey,szSubKey,0,KEY_ALL_ACCESS,&hKey1); if(lResult != ERROR_SUCCESS) return FALSE; while(lResult == ERROR_SUCCESS) { lResult = RegEnumKeyEx(hKey1,dwIndex,szKeyName,&dwKeySize,NULL,NULL,NULL,NULL); if(lResult == ERROR_NO_MORE_ITEMS) { RegCloseKey(hKey1); return (RegDeleteKey(hKey,szSubKey)==ERROR_SUCCESS); } else if(lResult != ERROR_SUCCESS) { RegCloseKey(hKey1); return FALSE; } else { wsprintf(szKey,"%s\\%s\0",szSubKey,szKeyName); if(!DelNT(hKey,szKey)) { RegCloseKey(hKey1); return FALSE; } } dwIndex++; } return TRUE; } void ringReg::Close() { if(m_hKey!=NULL) RegCloseKey(m_hKey); m_hKey = NULL; } /////////////////////////////////////////////////////////////////////// // //配置文件操作类 // /////////////////////////////////////////////////////////////////////// ringINI::ringINI() { ZeroMemory(m_filename,MAX_PATH); bInited = FALSE; } ringINI::ringINI(LPCTSTR szFile) { SetFile(szFile); } ringINI::~ringINI() { ZeroMemory(m_filename,MAX_PATH); bInited = FALSE; } void ringINI::SetFile(LPCTSTR format,...) { va_list ap; if(m_filename[0] != '\0') ZeroMemory(m_filename,MAX_PATH); if(format) { va_start(ap, format); _vsntprintf(m_filename,MAX_PATH-2,format,ap); //vsprintf(m_filename, format, ap); va_end(ap); } if(m_filename[0] != '\0') bInited = TRUE; else bInited = FALSE; } int ringINI::GetInt(LPCTSTR section,LPCTSTR key,int nDefault/* = 0*/) { if(bInited) return GetPrivateProfileInt(section,key,nDefault,m_filename); else return nDefault; } DWORD ringINI::GetString(LPCTSTR section,LPCTSTR key,LPTSTR szBuf,int nBufSize,LPCTSTR szDefault/*=NULL*/) { if(szDefault == NULL) szDefault = ""; if(bInited) return GetPrivateProfileString(section,key,szDefault,szBuf,nBufSize,m_filename); else return 0; } BOOL ringINI::Write(LPCTSTR section,LPCTSTR key,LPCTSTR szBuf) { if(bInited) return WritePrivateProfileString(section,key,szBuf,m_filename); else return FALSE; } BOOL ringINI::Write(LPCTSTR section,LPCTSTR key,int nVal) { char s[20]; wsprintf(s,"%d\0\0",nVal); if(bInited) return WritePrivateProfileString(section,key,s,m_filename); else return FALSE; } BOOL ringINI::DeleteKey(LPCTSTR section,LPCTSTR szKey) { if(bInited) return WritePrivateProfileString(section,szKey,NULL,m_filename); else return FALSE; } BOOL ringINI::DeleteSection(LPCTSTR section) { if(bInited) return WritePrivateProfileString(section,NULL,NULL,m_filename); else return FALSE; } DWORD ringINI::GetSections(LPTSTR lpBuffer,int nSize) { if(bInited) return GetPrivateProfileSectionNames(lpBuffer,nSize,m_filename); else return 0; } DWORD ringINI::GetKeys(LPCTSTR szSec,LPTSTR lpBuffer,int nSize) { if(bInited) return GetPrivateProfileSection(szSec,lpBuffer,nSize,m_filename); else return 0; }